﻿
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- saved from url=(0014)about:internet -->
<html xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:mssdk="winsdk" xmlns:script="urn:script" xmlns:build="urn:build" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="Description" content="The DEBUG_STACK_FRAME_EX structure describes a stack frame and the address of the current instruction for the stack frame."/>
<meta name="MSHAttr" content="PreferredSiteName:MSDN"/>
<meta name="MSHAttr" content="PreferredLib:/library/windows/hardware"/>
<title>DEBUG_STACK_FRAME_EX</title>



<link rel="STYLESHEET" type="text/css" HREF="../common/backsdk4.css"/>





<style>
html,div { margin: 0; padding: 0;}

body {
	padding: 0px;
	margin: 0px;
	overflow: auto;
	height: 100%;
}

#winchm_template_button{
	float: right;
	width: 93px;
	top: 7px;
	position: relative;
	text-align: right;
	right: 5px;
	height: auto;
}

#winchm_template_top{
	padding: 0px;
	margin: 0px;
	border-bottom: 1px solid #9B9B9B;
	background-color: #B1CEFE;
}

#winchm_template_navigation{
	margin: 0px;
	padding-top: 7px;
	padding-left: 7px;
	padding-bottom: 3px;
	padding-right: 0px;
	font-size: 8.5pt;
	font-family: Arial, Helvetica, sans-serif;
	font-weight: normal;
	color: #585858;
}

#winchm_template_title{
	margin: 0px;
	padding-top: 4px;
	padding-left: 7px;
	padding-bottom: 7px;
	padding-right: 0px;
	font-size: 18px; 
	font-family: Verdana, Geneva, sans-serif;
	color: #363636;
}

#winchm_template_content{
	margin-top: 20px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	width: auto  !important;
	width: 100%;
}

#winchm_template_footer{
	border-width: 1px;
	border-color: #B1CEFE;
	border-top-style: solid;
	margin-top: 15px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	padding-top: 7px;
	padding-left: 0px;
	padding-bottom: 0px;
	padding-right: 0px;
	font-family: arial, helvetica, sans-serif;
	font-size: 8.5pt;
	color: #696969;
	width: auto;
	text-align: left;
}


#winchm_template_container{
	margin: 0px;
	padding: 0px;
	position: static;
	padding-bottom: 3px;
	overflow: auto;
	background-color: #FFFFFF;
}


@media print
{
#winchm_template_container{
	position: static;	
	margin: 0px;
	padding: 5px;
	
	width: auto;
	height: auto;
	overflow: auto;
}
#winchm_template_button{
visibility:hidden;
}
}

#winchm_template_navigation A:link	{text-decoration: none; color:#004080}
#winchm_template_navigation A:visited  {text-decoration: none; color: #004080}
#winchm_template_navigation A:active {text-decoration: none; color: #004080 }
#winchm_template_navigation A:hover {text-decoration: none;color: #0080FF}

A:link	{text-decoration: underline; color:#0033CC}
A:visited  {text-decoration: underline; color: #0033CC}
A:active {text-decoration: underline; color: #0033CC }
A:hover {text-decoration: underline;color: #FF0000;}
</style>
<script type="text/javascript">
function isMobile(){
Agent = window.navigator.userAgent;
if (Agent.indexOf("iPhone")>=1 || Agent.indexOf("iPad")>=1 || Agent.indexOf("iPod")>=1 || Agent.indexOf("Android")>=1){
return true;
}else{
return false;	
}

}
function d_onresize(){
if (window.navigator.userAgent.indexOf("MSIE")>=1){
document.getElementById('winchm_template_container').style.pixelWidth = document.body.offsetWidth - 3;
document.getElementById('winchm_template_container').style.pixelHeight = document.body.offsetHeight - document.getElementById('winchm_template_top').offsetHeight - 4;
}
document.getElementById('winchm_template_container').style.top = document.getElementById('winchm_template_top').offsetHeight + 'px';
}

function d_onbeforeprint(){
document.getElementById('winchm_template_container').style.width = 'auto';
document.getElementById('winchm_template_container').style.height = 'auto';
}

function d_onafterprint(){
d_onresize();
}

if(!isMobile()){

window.onload = d_onresize;
window.onresize = d_onresize;
window.onbeforeprint = d_onbeforeprint;
window.onafterprint = d_onafterprint;

document.write("<style>\n");
document.write("body {overflow: hidden;}\n");
document.write("#winchm_template_container {position: absolute;overflow: auto;top : 0px;right: 0px;bottom: 0px;left: 0px;}\n");
document.write("</style>\n");
}

</script>
</head>
<body><script language="JavaScript" type="text/JavaScript">
function syn(){
if(parent.nav.tree){
 if(parent.nav.tree.loaded){
  parent.nav.tree.selectNode(897);
 }else{
  setTimeout("syn()",500);
}
  }else{
  setTimeout("syn()",500);
  }}
if(parent!=self){
  setTimeout("syn()",100);
}else{
  parent.location.href = "../../index.htm?page=debugger/debug_stack_frame_ex.htm";
}
originalOnload = window.onload;
if(originalOnload==null){
window.onload = function(){parent.contentLoaded = true;};
}else{
window.onload = function(){originalOnload();parent.contentLoaded = true;};
}
</script> 


<div id="winchm_template_top">
	<div id="winchm_template_button"><A href="debug_stack_frame.htm" title="Previous topic"><img id="winchm_template_prev" alt="Previous topic" src="../template2/btn_prev_n.gif" border="0"></a><A href="debug_status_xxx.htm" title="Next topic"><img id="winchm_template_next" alt="Next topic" src="../template2/btn_next_n.gif" border="0"></a></div>
	<div id="winchm_template_navigation">Help &gt; 
<A href="introduction6.htm">Debugging Tools for Windows (WinDbg, KD, CDB, NTSD)</A> &gt; <A href="debugging_resources.htm">Debugging Resources</A> &gt; <A href="debugger_engine_and_extension_apis.htm">Debugger Engine and Extension APIs</A> &gt; <A href="using_the_debugger_engine_api.htm">Using the Debugger Engine API</A> &gt; <A href="debugger_engine_reference.htm">Debugger Engine Reference</A> &gt; <A href="structures_and_constants.htm">Structures and Constants</A> &gt; </div>
	<div id="winchm_template_title">DEBUG_STACK_FRAME_EX</div>
</div>
<div id="winchm_template_container">
	<div id="winchm_template_content"><div id="mainSection"><p>The DEBUG_STACK_FRAME_EX structure describes a stack frame and the address of the current instruction for the stack frame. </p>
<h2>Syntax</h2>
<div class="code"><span codelanguage="ManagedCPlusPlus"><table>
<tr>
<th>C++</th>
</tr>
<tr>
<td>
<pre>typedef struct _DEBUG_STACK_FRAME {
  ULONG64 InstructionOffset;
  ULONG64 ReturnOffset;
  ULONG64 FrameOffset;
  ULONG64 StackOffset;
  ULONG64 FuncTableEntry;
  ULONG64 Params[4];
  ULONG64 Reserved[6];
  BOOL    Virtual;
  ULONG   FrameNumber;
  ULONG   InlineFrameContext;
  ULONG   Reserved1;
} DEBUG_STACK_FRAME, *PDEBUG_STACK_FRAME;</pre>
</td>
</tr>
</table></span></div>
<h2>Members</h2>
<dl>
<dt><b>InstructionOffset</b></dt>
<dd>
<p>The location in the process's virtual address space of the related instruction for the stack frame.  This is typically the return address for the next stack frame, or the current instruction pointer if the frame is at the top of the stack.  </p>
</dd>
<dt><b>ReturnOffset</b></dt>
<dd>
<p>The location in the process's virtual address space of the return address for the stack frame.  This is typically the related instruction for the previous stack frame.</p>
</dd>
<dt><b>FrameOffset</b></dt>
<dd>
<p>The location in the process's virtual address space of the stack frame, if known.  Some processor architectures do not have a frame or have more than one.  In these cases, the engine chooses a value most representative for the given level of the stack.</p>
</dd>
<dt><b>StackOffset</b></dt>
<dd>
<p>The location in the process's virtual address space of the processor stack.</p>
</dd>
<dt><b>FuncTableEntry</b></dt>
<dd>
<p>The location in the target's virtual address space of the function entry for this frame, if available. When set, this pointer is not guaranteed to remain valid indefinitely and should not be held for future use.  Instead, save the value of <b>InstructionOffset</b> and use it with <a href="#Bookmark699"><b>IDebugSymbols3::GetFunctionEntryByOffset</b></a> to retrieve function entry information later. </p>
</dd>
<dt><b>Params</b></dt>
<dd>
<p>The values of the first four stack slots that are passed to the function, if available.  If there are less than four arguments, the remaining entries are set to zero.  These stack slots are not guaranteed to contain parameter values.  Some calling conventions and compiler optimizations might interfere with identification of parameter information.  For more detailed argument information and proper location handling, use <a href="#Bookmark648"><b>IDebugSymbols::GetScopeSymbolGroup</b></a> to retrieve the actual parameter symbols.</p>
</dd>
<dt><b>Reserved</b></dt>
<dd>
<p>Reserved for future use. Set to NULL.</p>
</dd>
<dt><b>Virtual</b></dt>
<dd>
<p>The value is set to <b>TRUE</b> if this stack frame was generated by the debugger by unwinding.  Otherwise, the value is <b>FALSE</b> if it was formed from a thread's current context.  Typically, this is <b>TRUE</b> for the frame at the top of the stack, where <b>InstructionOffset</b> is the current instruction pointer.</p>
</dd>
<dt><b>FrameNumber</b></dt>
<dd>
<p>The index of the frame.  This index counts the number of frames from the top of the call stack.  The frame at the top of the stack, representing the current call, has index zero.</p>
</dd>
<dt><b>InlineFrameContext</b></dt>
<dd>
<p>Inline frame context.</p>
</dd>
<dt><b>Reserved1</b></dt>
<dd>
<p>Used for alignment purposes. Set to 0.</p>
</dd>
</dl>
<h2>Requirements</h2>
<table>
<tr>
<th width="30%">
<p>Header</p>
</th>
<td width="70%">
<dl>
<dt>DbgEng.h (include DbgEng.h)</dt></dl></td></tr></table></div></div>	
	<div id="winchm_template_footer">Copyright &copy; 2019. All rights 
reserved. (To change the copyright info, just edit it in template.)</div>
</div>

</body>
</html>
